# -*- coding: utf-8 -*-
# @Time    : 2024/7/11 18:04
# @Author  : yujiahao
# @File    : 17_fastapi_status_code.py
# @description:响应状态码


'''

与指定响应模型的方式相同，在以下任意路径操作中，可以使用 status_code 参数声明用于响应的 HTTP 状态码：

@app.get()
@app.post()
@app.put()
@app.delete()
等……

注意，status_code 是（get、post 等）装饰器方法中的参数。与之前的参数和请求体不同，不是路径操作函数的参数。
status_code 参数接收表示 HTTP 状态码的数字。
status_code 还能接收 IntEnum 类型，比如 Python 的 http.HTTPStatus。(https://docs.python.org/3/library/http.html#http.HTTPStatus)

关于 HTTP 状态码


在 HTTP 协议中，发送 3 位数的数字状态码是响应的一部分。

这些状态码都具有便于识别的关联名称，但是重要的还是数字。

简言之：

100 及以上的状态码用于返回信息。这类状态码很少直接使用。具有这些状态码的响应不能包含响应体
200 及以上的状态码用于表示成功。这些状态码是最常用的
200 是默认状态代码，表示一切正常
201 表示已创建，通常在数据库中创建新记录后使用
204 是一种特殊的例子，表示无内容。该响应在没有为客户端返回内容时使用，因此，该响应不能包含响应体
300 及以上的状态码用于重定向。具有这些状态码的响应不一定包含响应体，但 304未修改是个例外，该响应不得包含响应体
400 及以上的状态码用于表示客户端错误。这些可能是第二常用的类型
404，用于未找到响应
对于来自客户端的一般错误，可以只使用 400
500 及以上的状态码用于表示服务器端错误。几乎永远不会直接使用这些状态码。应用代码或服务器出现问题时，会自动返回这些状态代码

状态码及适用场景的详情，请参阅 MDN 的 HTTP 状态码文档。https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
'''

from fastapi import FastAPI, status

app = FastAPI()


# 状态码名称快捷方式
# 201 表示已创建的状态码。
@app.post("/items/", status_code=201)
async def create_item(name: str):
    return {"name": name}


# 可以使用 fastapi.status 中的快捷变量
@app.post("/items_1/", status_code=status.HTTP_201_CREATED)
async def create_item_1(name: str):
    return {"name": name}
